//
//  HomeViewController.swift
//  新浪微博
//
//  Created by 赵春浩 on 15/12/13.
//  Copyright © 2015年 DreamFlyingCow. All rights reserved.
//

import UIKit
import AFNetworking
import SVProgressHUD

private let HomeCellId = "HomeCellId"

class HomeViewController: BaseTableViewController {

    // 模型数据
    private lazy var statuses = [Status]()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        if !userLogin {
            visitorLoginView?.setupInfo("登录后，别人评论你的微博，发给你的消息，都会在这里收到通知", imageName: nil)
            
            // 记得要加一个 return
            return
        }
        // 设置 tableView
        prepareTableView()
        loadData()
    }

    private func prepareTableView() {
        // 首先必须要注册 cell
        tableView.registerClass(StatusCell.self, forCellReuseIdentifier: HomeCellId)
        // 修改 tableView 固定高度
        // 希望 tableView 能够自动计算行高, 需要设置两个关键的属性
        // 1. 设置预估行高, 应该尽量接近真实的行高, 能够提高效率
        tableView.estimatedRowHeight = 300
        // tableView 能够自动进行计算行高, 还有一个关键条件就是 contentView 必须添加约束
        // 2. 设置让 tableView 自动计算行高
        tableView.rowHeight = UITableViewAutomaticDimension
    }
    
    private func loadData() {
        // 实现网络请求
        let AFN = AFHTTPSessionManager()
        // get 请求
        let urlString = "https://api.weibo.com/2/statuses/home_timeline.json"
        
        // 判断 token 是否为空
        guard let token = UserAccountViewModel().token else {
            print("token 为空")
            SVProgressHUD.showInfoWithStatus("请重新登录")
            return
        }
        let parameters = ["access_token" : token]
        AFN.GET(urlString, parameters: parameters, progress: { (p) -> Void in
//            print(p)
            
            }, success: { (task, result) -> Void in
                // 在 success 回调中, 做数据解析, 需要判断 result 能否转化为字典
                guard let dict = result as? [String : AnyObject] else {
                    print("数据不合法")
                    SVProgressHUD.showInfoWithStatus("您的网路出错了, 请一会再试一下")
                    return
                }
                // 到这里说明数据获取成功
                // 通过键值的方式 获取 statuses 对应的数组
                if let array = dict["statuses"] as? [[String : AnyObject]] {
                    // TODO: 遍历数组中所有的字典, 做字典转模型的操作
                    var list = [Status]()
                    for item in array {
                        let s = Status(dict: item)
                        list.append(s)
                    }
                    
                    self.statuses = list
                    // 获取到新数据之后, 需要刷新数据
                    self.tableView.reloadData()
                }
                
                
            }) { (task, error) -> Void in
                print(error)
        }
        
    }
 
}

// MARK: tableView 的数据源方法
extension HomeViewController {
    
    // 返回有多少组
    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }
    
    // 返回一共有多少个 cell
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
//        print(statuses.count)
        return statuses.count
    }
    
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        // iOS6.0推出的方法, 一定可以获取一个 cell 对象, xib/ sb 中不需要手动注册 cell
        let cell = tableView.dequeueReusableCellWithIdentifier(HomeCellId, forIndexPath: indexPath) as! StatusCell
        cell.status = statuses[indexPath.row]
        
        return cell
    }
    
    
}


